package _06_binaryTree;

// 二叉树抽象数据类型，T表示数据元素的数据类型
public interface BinaryTTree<T> {
    // 判断是否为空
    boolean isEmpty();
    // 插入x元素作为根节点
    void insert(T x);
    // 插入x作为p结点的左/右孩子并返回
    BinaryNode<T> insert(BinaryNode<T> p, T x, boolean left);
    // 删除p结点的左/右子树
    void remove(BinaryNode<T> p, boolean left);
    // 删除二叉树的所有结点
    void clear();
    // 先根次序遍历二叉树
    void preOrder();
    // 中根次序遍历二叉树
    void inOrder();
    // 后根次序遍历二叉树
    void postOrder();
    // 层次遍历树
    void levelOrder();
    // 返回二叉树的结点数
    int size();
    // 二叉树的高度
    int height();
    // 查找并返回首个与key相等元素结点
    BinaryNode<T> search(T key);
    // 返回首个与key相等元素结点所在层次
    int level(T key);
    // 查找并删除首个以与key相等元素为根的子树
    void remove(T key);
}
